import json
import os
from datetime import timedelta

import yaml
from comm.const import SECRET_KEY, TOKEN_EXPIRES
from comm.openDbConfig import openDbBase, dbConnectUrl


# 接口文档配置
def SwaggerConfig():
    # in说明******************************
    # query: 查询参数。参数位于 URL 的查询字符串中，例如 ?id=123。
    # header: 请求头参数。参数位于 HTTP 请求的头部分中，例如 Authorization: Bearer your_token。
    # path: 路径参数。参数位于 URL 的路径中，例如 /users/123 中的 123。
    # formData: 表单数据参数。参数位于 HTTP 请求的正文中，以表单数据的形式发送，例如 Content-Type: application/x-www-form-urlencoded。
    # body: 请求体参数。参数位于 HTTP 请求的正文中，以 JSON 或 XML 等格式发送，例如 Content-Type: application/json。
    #type说明*****************************
    # 1、string (str): 字符串类型。
    # 2、number (float): 数字类型。
    # 3、integer (int): 整数类型。
    # 4、boolean (bool): 布尔类型。
    # 5、array (list): 数组类型。
    # 6、object (dict): 对象类型。
    # 7、file (file): 文件类型。
    # 试用注释实例

    return {
    'title': 'xx项目接口',
    'description': """
    xx项目接口文档地址
    请求参数说明
    query: 查询参数。参数位于 URL 的查询字符串中，例如 ?id=123。
    header: 请求头参数。参数位于 HTTP 请求的头部分中，例如 Authorization: Bearer your_token。
    path: 路径参数。参数位于 URL 的路径中，例如 /users/123 中的 123。
    formData: 表单数据参数。参数位于 HTTP 请求的正文中，以表单数据的形式发送，例如 Content-Type: application/x-www-form-urlencoded。
    body: 请求体参数。参数位于 HTTP 请求的正文中，以 JSON 或 XML 等格式发送，例如 Content-Type: application/json。
    字段\参数类型说明
    1、string (str): 字符串类型。
    2、number (float): 数字类型。
    3、integer (int): 整数类型。
    4、boolean (bool): 布尔类型。
    5、array (list): 数组类型。
    6、object (dict): 对象类型。
    7、file (file): 文件类型。
    """,
    'version': '1.0.0',
    'specs_route': '/apidocs/',
    'termsOfService':'',
    'hide_model ':False,
    'supportedSubmitMethods':['get']  #表示只有get请求可以点击请求
    }

class Config:
    # 获取数据库连接地址
    dbUrl,multipledb = dbConnectUrl()
    SQLALCHEMY_DATABASE_URI = dbUrl
    # SQLALCHEMY_DATABASE_URI = 'sqlite:///db2.sqlite3'
    # 多数据库配置
    SQLALCHEMY_BINDS = {
        # 'db2': 'sqlite:///db2.sqlite3'
    }
    # 多数据库连接配置
    for itm in multipledb.keys():
        SQLALCHEMY_BINDS[itm] = multipledb[itm]
    SQLALCHEMY_TRACK_MODIFICATIONS = False
    SQLALCHEMY_POOL_SIZE = 200
    SQLALCHEMY_MAX_OVERFLOW = 200
    SQLALCHEMY_POOL_TIMEOUT = 100
    SQLALCHEMY_ECHO = False

    # 接口文档配置
    SWAGGER =  SwaggerConfig()
    TESTING = False
    DEBUG = False

    # 配置jwt
    JWT_SECRET_KEY = SECRET_KEY
    JWT_ACCESS_TOKEN_EXPIRES = timedelta(minutes=TOKEN_EXPIRES)  #生成token的有效期
    JWT_REFRESH_TOKEN_EXPIRES = timedelta(minutes=TOKEN_EXPIRES)  #刷新token的有效期

    JWT_HEADER_NAME = 'token'  #设置请求头参数名称
    JWT_HEADER_TYPE = 'flask-jwt'  #设置参数前缀

envs = {
    "pro":Config,
}

